关于Linux字体

以前没有关注Linux的字体。最近遇到好几个关于字体的问题,特地了解了字体的相关知识。下面,首先列出遇到的问题:

自己以前对字体没有什么基本的概念,下面就将学习内容做一些笔记。

字体大小显示等的调节

特别折腾,安装了基于ubuntu的Linux deepin,安装完之后发现显示效果很不好,主要问题是问题看上去很模糊,大小也不合适。自己摸索着主要从下面几个方面去配置。

显示器分辨率

字体不好看,不够清晰,不一定是字体种类,字体大小等的问题。显示器的分辨率也很重要。例如,原来配置是在13寸的笔记本上,现在换成了23寸的显示器。显示效果就很差了。这个需要设置Linux系统显示器分辨率的输出。我发现,Linux一般很难自己检测好显示器的分辨率,设置好。

例如,现在我23寸的显示器,Linux系统给我设置的分辨率是1280×800,显示效果当然不好。查看和设置的命令如下:

xrandr	//查看Linux系统设置的分辨率
xrandr -s 1920*1080		//设置输出的分辨率

关于WQY字体

字体全部设置为了文泉驿等宽微米黑,大小为13。个人感觉,最重要是显示器的分辨率,对显示效果起到了决定性的作用。

[root@localhost yum.repos.d]# yum -C list wqy*
Loaded plugins: presto, refresh-packagekit
Available Packages
wqy-bitmap-fonts.noarch                  1.0.0-0.1.rc1.fc12                 updates-ftp.sjtu.edu.cn   
wqy-microhei-fonts.noarch                0.2.0-0.2.beta.fc12                updates-ftp.sjtu.edu.cn   
wqy-unibit-fonts.noarch                  1.1.0-7.fc12                       Everything-ftp.sjtu.edu.cn
wqy-zenhei-fonts.noarch                  0.8.38-3.fc12                      Everything-ftp.sjtu.edu.cn

wqy-bitmap-fonts.noarch wqy点阵宋体 wqy-unibit-fonts wqy Unibit等宽字体 wqy-zenhei-fonts wqy正黑体

NetBeans中文字体

缺省的NetBeans在使用Swing的缺省字体,大小为11。IDE工具NetBeans打开文件,中文显示为方框的原因:

NetBeans是一个Java应用程序,Java程序启动的时候会去在$JAVA_HOME/jre/lib/fonts目录下寻找相应的字体来显示。由于JDK默认没有中文字体,所以我们需要手工的来设置一下,让java应用程序能够找到相应的中文字体。这样就能够解决问题了。

Netbeans是一个java应用程序,所以在安装时,肯定会在你的系统中安装有java development kit (jdk) 或 java runtime environment (jre) 的安装包。可以通过NetBeans的配置文件查看到其运行时jre所在的位置。在NetBeans安装目录的etc/netbeans.conf文件中,可以看到需要的jre的位置如下所示:

# Default location of JDK, can be overridden by using --jdkhome <dir>:
netbeans_jdkhome="/usr/lib/jvm/jre"

下面你需要做的,就是配置好这个JRE中的字体,让这个JRE支持中文字体。那么,怎么让jre支持中文字体,或者说找到系统中的中文字体呢?

jrd的中文支持

按Sun的文档描述,jre在一个操作系统的字体配置文件,根据下列信息来确定。jre 使用按下列顺序第一个找到的文件作为系统的字体配置文件:

JavaHome/lib/fontconfig.OS.Version.properties
JavaHome/lib/fontconfig.OS.Version.bfc
JavaHome/lib/fontconfig.OS.properties
JavaHome/lib/fontconfig.OS.bfc
JavaHome/lib/fontconfig.Version.properties
JavaHome/lib/fontconfig.Version.bfc
JavaHome/lib/fontconfig.properties
JavaHome/lib/fontconfig.bfc

其中,JavaHome是JRE 的目录;OS表示操作系统的种类的字符串,对 Windows,为 “98″, “2000″, “Me”, “XP”, “2003″.对Solaris,为空.对Linux,为 “Sun”, “RedHat”, “Turbo”, “SuSE”;Version 表示操作系统版本的字符串。另外,上面的文件以 .properties 为扩展名的为文本文件,以 .bfc 结尾的是二进制文件。

按照这个文档的说明,我们可以按照下面的方法来配置中文字体。

  1. 确定系统的发布版类型,判别方法是 /etc 目录下的 release 文件:
    /etc/redhat-release => RedHat
    /etc/sun-release => Sun
    /etc/turbolinux-release => Turbo
    /etc/SuSE-release => SuSE
    

按这种判断方法,Fedora 等发源于 RedHat 的发布版都属于 RedHat 类。如果 /etc 目录下不存在上面 4 个文件的任何一个,则 OS 为空。

  1. 拷贝 JavaHome/lib/fontconfig.OS.properties.src 为 JavaHome/lib/fontconfig.OS.properties。如对于 Fedora:
    cp fontconfig.RedHat.properties.src fontconfig.RedHat.properties
    

对于不属于上面 4 类的发布版,不妨拷贝 RedHat 的配置文件为 fontconfig.properties:

cp fontconfig.RedHat.properties.src fontconfig.properties
  1. 编辑上述 .properties 文件,在文件的“Font File Names”一节里,找到在下面一行:
    filename.-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/chinese/TrueType/zysong.ttf
    

将“=”号以后的中文字体文件名,改为本系统上存在的一个中文字体文件名。您如果愿意,可以修改其他几行,为繁体中文、日语、韩语等您可能用到的语言设置合适的字体。

经过这么简单的修改,Java 的图形界面程序就可以正确地显示中文了。

上面介绍的是设置中文字体的标准的做法。另外,还有一个“偷懒”的做法。这就是:不需要修改任何文件,只要创建一个新目录:

JavaHome/lib/fonts/fallback/

然后把中文字体的 TTF 文件拷贝到这个目录里就 OK 了!

其实不只netbeans,我们经常会发现在Linux下,很多其它的java应用程序的中文会变成一个一个的“口”字,都是同样的原因。解决的办法也是一样的。

字体格式

我在linux中双击字体文件名就看到了, 包括几乎所有字体格式, 如pfb, ttf, otf, pfa, pcf等, 但无法看到afm, 和tfm格式的.